using System;
using System.Globalization;
using System.Windows.Data;
using WPFTemplateLib.WpfConverters.Core;

namespace WPFTemplateLib.WpfConverters
{
	/// <summary>
	/// [转换器] 将 bool 转换为 bool?，主要是为了支持回转，用于 CheckBox 的 IsChecked 属性绑定 等场景。
	/// </summary>
	public class BoolToNullableBoolConverter : ValueConverterBase
	{
		/// <summary>
		/// null 转为 true 还是 false（默认 false）
		/// </summary>
		public bool NullToTrueOrFalse { get; set; }

		/// <summary>
		/// 是否翻转 bool 值（默认 false，且不处理 null 值）
		/// </summary>
		public bool IsReverseBoolValue { get; set; }

		/// <inheritdoc />
		public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
		{
			bool result = false;
			if (value is bool boolValue)
			{
				result = IsReverseBoolValue ? !boolValue : boolValue;
			}
			else if(value == null) //bool->bool? 此处实际不需要，保留以提高兼容性。
			{
				result = NullToTrueOrFalse;
			}

			return result;
		}

		/// <inheritdoc />
		public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
		{
			if (value is bool boolValue)
			{
				return IsReverseBoolValue ? !boolValue : boolValue;
			}
			else if (value == null)
			{
				return NullToTrueOrFalse;
			}

			//如果不是 bool 或 null，则不处理
			return Binding.DoNothing;
		}
	}
}
